{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'\\nThis module deals with binary target variables\\n'"
      ]
     },
     "execution_count": 248,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "import numpy as np\n",
    "'''\n",
    "This module deals with binary target variables\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [],
   "source": [
    "column_names = ('duration',\n",
    "                'protocol_type',\n",
    "                'service',\n",
    "                'flag',\n",
    "                'src_bytes',\n",
    "                'dst_bytes',\n",
    "                'land',\n",
    "                'wrong_fragment',\n",
    "                'urgent',\n",
    "                'hot',\n",
    "                'num_failed_logins',\n",
    "                'logged_in',\n",
    "                'num_compromised',\n",
    "                'root_shell',\n",
    "                'su_attempted',\n",
    "                'num_root',\n",
    "                'num_file_creations',\n",
    "                'num_shells',\n",
    "                'num_access_files',\n",
    "                'num_outbound_cmds',\n",
    "                'is_host_login',\n",
    "                'is_guest_login',\n",
    "                'count',\n",
    "                'srv_count',\n",
    "                'serror_rate',\n",
    "                'srv_serror_rate',\n",
    "                'rerror_rate',\n",
    "                'srv_rerror_rate',\n",
    "                'same_srv_rate',\n",
    "                'diff_srv_rate',\n",
    "                'srv_diff_host_rate',\n",
    "                'dst_host_count',\n",
    "                'dst_host_srv_count',\n",
    "                'dst_host_same_srv_rate',\n",
    "                'dst_host_diff_srv_rate',\n",
    "                'dst_host_same_src_port_rate',\n",
    "                'dst_host_srv_diff_host_rate',\n",
    "                'dst_host_serror_rate',\n",
    "                'dst_host_srv_serror_rate',\n",
    "                'dst_host_rerror_rate',\n",
    "                'dst_host_srv_rerror_rate',\n",
    "                'Y')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Input training set \n",
    "train_X = pd.read_csv('../data/NSL-KDD/kddcup.data_10_percent', header=None, names=column_names)\n",
    "train_y = train_X['Y']\n",
    "train_X = train_X.drop('Y',axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(311029, 41)"
      ]
     },
     "execution_count": 251,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Input test set\n",
    "test_X = pd.read_csv('../data/corrected',header=None, names=column_names)\n",
    "test_y = test_X['Y']\n",
    "test_X = test_X.drop('Y', axis = 1)\n",
    "test_X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [],
   "source": [
    "# convert Y labels to binary labels\n",
    "unique_values = test_y.unique()\n",
    "unique_values_train = train_y.unique()\n",
    "test_y = test_y.replace('normal.',1)\n",
    "train_y = train_y.replace('normal.',1)\n",
    "unique_values = np.delete(unique_values,0)\n",
    "unique_values_train = np.delete(unique_values_train,0)\n",
    "test_y = test_y.replace(unique_values, 0)\n",
    "train_y = train_y.replace(unique_values_train, 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [],
   "source": [
    "# CONVERT CATEGORICAL VALUES TO FLOATS\n",
    "# By eye_browsing, columns protocotype, service and flag are categorical values and needed to be converted to ints\n",
    "train_X['service'] = train_X['service'].astype('category')\n",
    "train_X['service'] = train_X['service'].cat.codes\n",
    "train_X['protocol_type'] = train_X['protocol_type'].astype('category')\n",
    "train_X['protocol_type'] = train_X['protocol_type'].cat.codes\n",
    "train_X['flag'] = train_X['flag'].astype('category')\n",
    "train_X['flag'] = train_X['flag'].cat.codes\n",
    "\n",
    "test_X['service'] = test_X['service'].astype('category')\n",
    "test_X['service'] = test_X['service'].cat.codes\n",
    "test_X['protocol_type'] = test_X['protocol_type'].astype('category')\n",
    "test_X['protocol_type'] = test_X['protocol_type'].cat.codes\n",
    "test_X['flag'] = test_X['flag'].astype('category')\n",
    "test_X['flag'] = test_X['flag'].cat.codes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [],
   "source": [
    "# TRAIN MODELS\n",
    "def model_scoring(train_X, train_y, test_X, test_y, model, model_name):\n",
    "    print('-----------{} running-----------'.format(model_name))\n",
    "    \n",
    "    clf = model\n",
    "    clf.fit(train_X, train_y)\n",
    "    score = clf.score(test_X, test_y)\n",
    "    \n",
    "    print('score for {}'.format(model_name), score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------LogisticRegression running-----------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/honggong/miniconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score for LogisticRegression 0.8382015824890927\n",
      "-----------RandomForestClassifier running-----------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/honggong/miniconda3/lib/python3.7/site-packages/sklearn/ensemble/forest.py:246: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n",
      "  \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score for RandomForestClassifier 0.9275662398040054\n",
      "-----------LinearRegression running-----------\n",
      "score for LinearRegression 0.3738066814276778\n",
      "-----------Naive_Bayes running-----------\n",
      "score for Naive_Bayes 0.8762944934395185\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'done'"
      ]
     },
     "execution_count": 255,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "models = [[LogisticRegression(),'LogisticRegression'],[RandomForestClassifier(), 'RandomForestClassifier'], \n",
    "         [LinearRegression(), 'LinearRegression'], [GaussianNB(), 'Naive_Bayes']]\n",
    "for model in models:\n",
    "    model_scoring(train_X, train_y, test_X, test_y, model[0], model[1])\n",
    "\n",
    "'done'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From above result, we drop linear regression model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [],
   "source": [
    "del models[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [],
   "source": [
    "# FUNCTION TO PLOT AUC CURVES \n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "def plotUnivariateROC(preds, truth, label_string):\n",
    "    '''\n",
    "    preds is an nx1 array of predictions\n",
    "    truth is an nx1 array of truth labels\n",
    "    label_string is text to go into the plotting label\n",
    "    '''\n",
    "    #Student input code here\n",
    "    #1. call the roc_curve function to get the ROC X and Y values\n",
    "    fpr, tpr, thresholds = roc_curve(truth, preds)\n",
    "    #2. Input fpr and tpr into the auc function to get the AUC\n",
    "    roc_auc = auc(fpr, tpr)\n",
    "    \n",
    "    #we are doing this as a special case because we are sending unfitted predictions\n",
    "    #into the function\n",
    "    if roc_auc < 0.5:\n",
    "        fpr, tpr, thresholds = roc_curve(truth, -1 * preds)\n",
    "        roc_auc = auc(fpr, tpr)\n",
    "\n",
    "    #chooses a random color for plotting\n",
    "    c = (np.random.rand(), np.random.rand(), np.random.rand())\n",
    "\n",
    "    #create a plot and set some options\n",
    "    plt.plot(fpr, tpr, color = c, label = label_string + ' (AUC = %0.3f)' % roc_auc)\n",
    "    \n",
    "\n",
    "    plt.plot([0, 1], [0, 1], 'k--')\n",
    "    plt.xlim([0.0, 1.0])\n",
    "    plt.ylim([0.0, 1.0])\n",
    "    plt.xlabel('FPR')\n",
    "    plt.ylabel('TPR')\n",
    "    plt.title('ROC')\n",
    "    plt.legend(loc=\"lower right\")\n",
    "    \n",
    "    return roc_auc\n",
    "\n",
    "\n",
    "def model_pred(train_X, train_y, test_X, test_y, model, model_name):\n",
    "    print('-----------{} running-----------'.format(model_name))\n",
    "    \n",
    "    clf = model\n",
    "    clf.fit(train_X, train_y)\n",
    "    pred_prob = clf.predict_proba(test_X)[:,1]\n",
    "    \n",
    "    return pred_prob, test_y, model_name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------LogisticRegression running-----------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/honggong/miniconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/honggong/miniconda3/lib/python3.7/site-packages/sklearn/linear_model/base.py:297: RuntimeWarning: overflow encountered in exp\n",
      "  np.exp(prob, prob)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------RandomForestClassifier running-----------\n",
      "-----------Naive_Bayes running-----------\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve, auc\n",
    "\n",
    "fig = plt.figure(figsize = (12, 6))\n",
    "ax = plt.subplot(111)\n",
    "\n",
    "for model in models:\n",
    "    pred, truth, label_s = model_pred(train_X, train_y, test_X, test_y, model[0], model[1])\n",
    "    plotUnivariateROC(pred, truth, label_s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
